/**
 * Created by TEANA on 2017/7/4.
 */

module.exports = ngModule => {
  ngModule.factory('$native', () => {
    return {
      /**
       * 验证当前环境是否在APP环境中
       *
       * @return -> true[是],false[否]
       * */
      isNative() {
        if(typeof(nativeObject) !== 'undefined'){
          return true;
        }
        return false;
      },
      /**
       *
       * 调用原生的JS方法(调用股票详情)
       * @param e 当前DOM元素
       */
      showStockDetail(stockCode) {
        let info = "{\"stockCode\":\"" + stockCode + "\"}";
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam('stockDetail', info);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（获取原生设置的字体大小）
       */
      getFontSize() {
        let index = 0;
        if(this.isNative()){
          try{
            index = nativeObject.handleMsgWithParam("getFontSize", "");
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
        return index;
      },
      /**
       *
       * 调用原生的JS方法（显示右上方导航按钮）
       *
       * @param type 右侧工具栏显示设置
       *          ---- 0或不传：默认显示字体和分享
       *          ---- -1：都不显示(@TODO：废弃，调用：hideNavigationRightButton)
       *          ----1：只显示分享
       *          ----2：只显示字体
       */
      showNavigationRightButton(type) {
        if(this.isNative()){
          try{
            if(!type){
              type = 0;
            }
            let params = "{\"type\":\"" + type + "\"}";
            nativeObject.handleMsgWithParam("showNavigationRightButton", params);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（隐藏右上方导航按钮）
       */
      hideNavigationRightButton() {
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("hideNavigationRightButton", "");
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（设置导航标题）
       *
       * @param title 导航标题
       */
      setTitle (title) {
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("setTitle", title);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（获取埋点基本数据信息）
       */
      getBasicInfo() {
        let baseInfo = {};
        if(this.isNative()){
          try{
            baseInfo = JSON.parse(nativeObject.handleMsgWithParam("getBasicInfo", ""));
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
          /*baseInfo = {
           "Lat":"0",
           "AppVersion":"6.4.0",
           "Lng":"0",
           "DeviceId":"11111111",
           "ClientId":"0"
           };*/
        }
        return baseInfo;
      },
      /**
       *
       * 调用原生的JS方法（获取自选股代码）
       */
      getMyStocks() {
        let myStocks = '';
        if(this.isNative()){
          try{
            myStocks = nativeObject.handleMsgWithParam("getMyStocks", "");
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
        return myStocks;
      },
      /**
       *
       * 调用原生的JS方法（埋点：统计事件）
       *
       * @param key                                       --事件ID[必传]
       * @param segmentation{key:value, key:value}        --事件附加信息[非必传]
       * @param sum                                       --总和[目前来说不用]
       *
       * */
      recordEvent(key, segmentation, sum){
        if(!key){
          console.warn('统计事件[key]不能为空');
          return;
        }
        if(!sum){
          var sum = 0;
        }
        if(!segmentation){
          var segmentation = "{}";
        }
        let jsonStr = "{\"key\" : \""+key+"\", \"segmentation\" : "+segmentation+", \"sum\" : \""+sum+"\"}";
        console.log(jsonStr);
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("recordEvent", jsonStr);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（埋点：开始统计事件）
       *
       * @param key                                       --事件ID[必传]
       *
       * */
      startEvent(key){
        if(!key){
          console.warn('统计事件[key]不能为空');
          return;
        }
        let jsonStr = '{"key" : "'+key+'"}';
        console.log(jsonStr);
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("startEvent", jsonStr);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 调用原生的JS方法（埋点：结束统计事件）
       *
       * @param key                                       --事件ID[必传]
       * @param segmentation{key:value, key:value}        --事件附加信息[非必传]
       * @param sum                                       --总和[目前来说不用]
       *
       * */
      endEvent(key, segmentation, sum){
        if(!key){
          console.warn('统计事件[key]不能为空');
          return;
        }
        if(!sum){
          var sum = 0;
        }
        if(!segmentation){
          var segmentation = "{}";
        }
        let jsonStr = "{\"key\" : \""+key+"\", \"segmentation\" : "+segmentation+", \"sum\" : \""+sum+"\"}";
        console.log(jsonStr);
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("endEvent", jsonStr);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /*
       *个股页面传递高度
       *
       * @param setHeight  --高度[必传]
       * */
      setInforViewHeight(setHeight) {
        setHeight = setHeight + '';
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("setInforViewHeight", setHeight);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /*
       *  设置分享内容
       *  @param params.title                                       --分享的标题[必传]
       *  @param params.content                                     --分享的描述[必传]
       */
      setShare(params) {
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("setShare", params);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /*
       *  新闻|公告|研报详情页面跳转
       */
      openNewDetail(params) {
        if(this.isNative()){
          try{
            nativeObject.handleMsgWithParam("openNewDetail", params);
          }catch(e){
            console.error(e);
          }
        }else{
          console.warn('无法获取原生[nativeObject]对象');
        }
      },
      /**
       *
       * 本项目方法(组装埋点基本数据信息）
       */
      packageHeaders() {
        let headers = {};
        let baseInfo = this.getBasicInfo();
        if(baseInfo && JSON.stringify(baseInfo) != '{}'){
          headers.SessionId = baseInfo.SessionId;
          headers.AppVersion = baseInfo.AppVersion;
          headers.Lat = baseInfo.Lat;
          headers.Lng = baseInfo.Lng;
          headers.DeviceId = baseInfo.DeviceId;
          headers.ClientId = baseInfo.ClientId;
        }
        return headers;
      },
      /**
       *
       * 本项目方法(设置导航信息）
       *
       * @param title 标题
       *
       * @param type 右侧工具栏显示设置
       *          ---- 0或不传：默认显示字体和分享
       *          ---- -1：都不显示
       *          ----1：只显示分享
       *          ----2：只显示字体
       */
      setNavigation(title, type) {
        if(title){
          // 更改页面title
          document.querySelector('title').innerHTML = title;
          // 调用原生方法修改title
          this.setTitle(title);
        }
        if(type){
          if(-1 == type){
            this.hideNavigationRightButton();
          }else {
            this.showNavigationRightButton(type);
          }
        }else{
          this.showNavigationRightButton(0);
        }
      }
    };
  });
};

